/*
This file is part of the iText (R) project.
Copyright (c) 1998-2025 Apryse Group NV
Authors: Apryse Software.

This program is offered under a commercial and under the AGPL license.
For commercial licensing, contact us at https://itextpdf.com/sales.  For AGPL licensing, see below.

AGPL licensing:
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.
*/
using System;
using System.Collections.Generic;

namespace iText.StyledXmlParser.Node {
    /// <summary>
    /// Interface for node classes that have a parent and children, and for which
    /// styles can be defined; each of these nodes can also have a name and attributes.
    /// </summary>
    public interface IElementNode : INode, IStylesContainer, IAttributesContainer, INameContainer {
        /// <summary>
        /// Gets additional styles, more specifically styles that affect an element
        /// based on its position in the HTML DOM, e.g. cell borders that are set
        /// due to the parent table "border" attribute, or styles from "col" tags
        /// that affect table elements, or blocks horizontal alignment that is
        /// the result of parent's "align" attribute.
        /// </summary>
        /// <returns>the additional html styles</returns>
        IList<IDictionary<String, String>> GetAdditionalHtmlStyles();

        /// <summary>Adds additional HTML styles.</summary>
        /// <param name="styles">the styles</param>
        void AddAdditionalHtmlStyles(IDictionary<String, String> styles);

        /// <summary>Gets the language.</summary>
        /// <returns>the language value</returns>
        String GetLang();
    }
}
